﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using NHibernate.Cfg;
using CarCrash.Core.Model;
using NHibernate.Context;
using NHibernate.Tool.hbm2ddl;

namespace CarCrash.Core.helper
{
    // хелпер хибернейта, представляет интерфейс для работы с сессиями,
    // а так же конфигурирует хибер и обновляет схему БД
    public class NHibernateHelper
    {

        private static ISessionFactory sessionFactory;

        public static ISessionFactory SessionFactory
        {
            get
            {
                if (sessionFactory == null)
                {
                    var configuration = new Configuration();
                    configuration.Configure();
                    configuration.AddAssembly(typeof(VehicleParameters).Assembly);
                    var setuper = new NHibernateSchemeSetuper(configuration);
                    // setuper.Install();
                    setuper.Update();
                    sessionFactory = configuration.BuildSessionFactory();
                }
                return sessionFactory;
            }
            set
            {
                sessionFactory = value;
            }
        }

        public static ISession OpenSession()
        {
            var session = SessionFactory.OpenSession();
            //session.FlushMode = FlushMode.Commit;
            CurrentSessionContext.Bind(session);
            return session;
        }

        internal static ISession GetCurrentSession()
        {
            return SessionFactory.GetCurrentSession();
        }

        public static void CloseSession()
        {
            SessionFactory.GetCurrentSession().Close();
            CurrentSessionContext.Unbind(SessionFactory);
        }

    }
}